package com.lw.common.config;

import cn.dev33.satoken.stp.StpInterface;
import com.lw.service.TbMenuService;
import com.lw.service.TbRoleService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
import java.util.List;

/**
 * saToken自定义权限加载接口实现类
 * 说明:
 * 当在接口中使用注解@SaCheckPermission时，会自动调用此方法，获取当前登录用户的权限列表
 * 此方法会在每次请求时被调用，因此需要保证其性能
 * 此方法的返回值会被缓存起来，有效期为30分钟
 * 当用户的权限列表发生变化时，需要手动调用StpUtil.clearPermissionCache(userId)来清除缓存
 * 当用户的权限列表发生变化时，需要手动调用StpUtil.clearRoleCache(userId)来清除缓存
 * 当用户的权限列表发生变化时，需要手动调用StpUtil.clearLoginCache(userId)来清除缓存
 * 当用户的权限列表发生变化时，需要手动调用StpUtil.clearAllLoginCache()来清除缓存
 * 当用户的权限列表发生变化时，需要手动调用StpUtil.clearAllCache()来清除缓存
 * 当用户的权限列表发生变化时，需要手动调用StpUtil.clearAllCacheByLoginId(userId)来清除缓存
 * 当用户的权限列表发生变化时，需要手动调用StpUtil.clearAllCacheByLoginIdAndRole(userId, role)来清除缓存
 * 当用户的权限列表发生变化时，需要手动调用StpUtil.clearAllCacheByLoginIdAndPermission(userId, permission)来清除缓存
 * 当用户的权限列表发生变化时，需要手动调用StpUtil.clearAllCacheByLoginIdAndRoleAndPermission(userId, role, permission)来清除缓存
 * 当用户的权限列表发生变化时，需要手动调用StpUtil.clearAllCacheByLoginIdAndRoleAndPermission(userId, role, permission)来清除缓存
 */
@Component
public class StpInterfaceImpl implements StpInterface {

    @Resource
    TbMenuService menuService;

    @Resource
    TbRoleService roleService;



    @Override
    public List<String> getPermissionList(Object loginId, String userId) {
        //loginId 为用户id 转为Long类型
        Long id = Long.parseLong(loginId.toString());
        return menuService.getPermissionList(id);
    }


    @Override
    public List<String> getRoleList(Object loginId, String s) {
        return roleService.getRoleIds((String)loginId);
    }
}
